home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / snippet.exe / READISK.ASM < prev    next >
Assembly Source File  |  1992-05-23  |  2KB  |  64 lines

  1.         page    55, 132
  2.  
  3. ;
  4. ;  READISK.ASM
  5. ;
  6. ;  Original Copyright Robert B. Stout dba MicroFirm
  7. ;  This subset released to the public domain and
  8. ;  susequently published in the author's "Exploiting DOS"
  9. ;  column in Tech Specialist magazine.
  10. ;
  11. ;  This version corrects Figure 1 of that column.
  12. ;
  13. ;  Requires MASM 5.1 or later
  14. ;
  15.  
  16. %       .MODEL  memodel,C               ;Add model support via
  17.                                         ;command line macro,
  18.                                         ;e.g. MASM /Dmemodel=LARGE
  19.         extrn _osmajor:BYTE
  20.  
  21.         .DATA
  22. start   dw      ?
  23. fill    dw      0
  24. number  dw      ?
  25. buf     dw      ?,?
  26.  
  27.         .CODE
  28. readisk PROC USES SI DI, drive:WORD, num_sec:WORD, start_sec:WORD, buffer:PTR
  29.         mov     AX,drive        ;Get drive number in AL
  30.         mov     AH,_osmajor     ;Load OS version in AH
  31.         mov     CX,num_sec      ;Set up regs for DOS 3 call
  32.         mov     DX,start_sec
  33.     IF  @DataSize
  34.         push    DS              ;Save DS in L & C models
  35.         lds     BX,buffer
  36.     ELSE
  37.         mov     BX,buffer
  38.     ENDIF
  39.         cmp     AH,4            ;DOS 4+?
  40.         jb      doint           ;No, skip it
  41.         mov     start,DX        ;Yes, fill in DCB structure
  42.         mov     number,CX
  43.         mov     buf,BX
  44.         mov     buf+2,DS
  45.         mov     cx,-1
  46.     IF  @DataSize               ;Point to DCB
  47.         mov     BX,@Data
  48.         mov     DS,BX
  49.     ENDIF
  50.         mov     bx,OFFSET start
  51. doint:  int     25h             ;Read sector
  52.         mov     AX,0            ;Set up no error return
  53.         jnc     bye             ;Error?
  54.         dec     AX              ;Yes, flag it
  55. bye:    add     SP,2            ;Int 25h leave the flags on the stack
  56.     IF  @DataSize
  57.         pop     DS              ;Restore DS in L & C models
  58.     ENDIF
  59.         ret
  60.  
  61. readisk ENDP  
  62.  
  63.         end
  64.